#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 5

//输入一个四位的十进制整数，编程实现将这四位整数转化为十六进制的字符串，并输出十六进制的字符串（注意负数的处理）


// 函数声明
char* decimalToHex(int number, char* hexString);

int main() {
    int number;  
    char hexString[MAX_LENGTH];
    printf("请输入一个四位的十进制整数: ");
    scanf("%d", &number); 
    decimalToHex(number, hexString);
	for(int i = 0;i<MAX_LENGTH;i++){
		printf("%c",hexString[i]);
	}
	printf("\n");
    return 0;
}

// 十进制到十六进制的转换函数
char* decimalToHex(int number, char* hexString) {
    int index = 3;          // 从右向左填充hexString数组
    int isNegative = 0;     // 用于记录是否是负数

    // 初始化hexString数组，将其全部填充为结束符
    memset(hexString, '\0', 5);

    // 处理负数，如果输入的数是负数，取其绝对值
    if (number < 0) {
        isNegative = 1;
        number = -number;
    }

    // 处理数字转换为十六进制
    while (number > 0 && index >= 0) {
        int remainder = number % 16; 
        if (remainder < 10) {
            hexString[index] = '0' + remainder; // 0-9对应'0'-'9'
        }
        else {
            hexString[index] = 'A' + (remainder - 10); // 10-15对应'A'-'F'
        }
        number /= 16; 
        index--; // 向左移动填充下一位
    }

    // 如果是负数，将负号添加到结果字符串的最前面
    if (isNegative) {
        memmove(hexString + 1, hexString, 4); // 将现有字符右移一位
        hexString[0] = '-'; // 添加负号
    }
	return hexString;
}
